Skip to content

truncate、delete、drop的区别

TRUNCATEDELETEDROP都是SQL中的数据操作语句,用于删除数据或表结构,但它们在功能、性能和使用场景上有显著的区别:

TRUNCATE

  • 用途
    • 用于删除表中的所有数据,但保留表结构。
  • 性能
    • DELETE快,因为它通常不记录单独的行删除操作,也不触发行级触发器。
  • 事务处理
    • 在大多数数据库系统中,TRUNCATE被视为一个DDL操作而非DML操作。因此,它可能不能被回滚(但这依赖于数据库的实现,某些系统可能支持事务性TRUNCATE)。
  • 自动递增
    • 自动递增的值会被重置。
  • 触发器
    • 不会激活行级触发器。
  • 语法
sql
TRUNCATE TABLE table_name;

DELETE

  • 用途
    • 用于删除表中的指定行或所有数据,但保留表结构和约束。
  • 性能
    • TRUNCATE慢,特别是在处理大表时,因为它逐行记录删除操作,并能激活触发器。
  • 事务处理
    • 是一个DML操作,支持事务处理,可以在事务中回滚。
  • 自动递增
    • 自动递增的值不会被重置。
  • 触发器
    • 激活行级触发器。
  • 语法
sql
DELETE FROM table_name WHERE condition;

若要删除所有行但不重置自动递增:

sql
DELETE FROM table_name;

DROP

  • 用途
    • 用于删除整个表、数据库或其他数据库对象,包括其结构和数据。
  • 性能
    • 通常是立即操作,不可恢复。
  • 事务处理
    • 是一个DDL操作,不可回滚(具体依赖数据库系统)。
  • 删除影响
    • 删除表时会删除所有数据、索引、约束和权限信息。
  • 语法
sql
DROP TABLE table_name;

总结

  • TRUNCATE:快速清空表,但保留结构。适用于需要清空但不删除表的场景。
  • DELETE:逐行删除数据,可以选择性删除某些记录。适用于只想删除部分数据的场合,且支持事务。
  • DROP:删除整个表定义及其所有数据。适用于不再需要表结构或其数据的情况。

选择哪个语句取决于你的需求是否涉及数据完整性、安全性、性能优化或是事务处理

bilibili

更新: 2024-09-13 19:59:46
原文: https://www.yuque.com/tulingzhouyu/db22bv/gcl128ydou9pzlp0